1. Field of the Invention
The present invention generally relates to cache resources for computer systems.
2. Description of the Related Art
To minimize access latency and maximize performance, data caches must be located as closely as possible to the processing units that operate on the data. Data centers often deploy “shared” or “networked” mass storage devices to facilitate the movement of processes between separate physical compute servers—examples of this include VMware's ESXi hypervisor with vMotion capability as well as Microsoft's HyperV implementation and several open source virtualization products, cloud computing environments, clustered computing environments, and grid computing environments. The movement of processes between physical servers can be done for any number of reasons including, but not limited to load balancing, disaster preparedness testing, power conservation, and routine maintenance.
When local data caches are used within physical servers, problems arise when processes are allowed to move between physical servers. Depending on circumstances, it may consume considerable resources or be impossible to coordinate the caches of separate physical machines to maintain data consistency; particularly so if the data caching devices are non-volatile and retain their contents when the machines that contain them are powered off. FLASH based cache devices are an example of such a non-volatile cache device.
If a process is executing on a physical machine “A” and causes data to be cached locally on machine “A”, then later is migrated to a new process executing on a separate physical machine “B”, the following scenario may occur. While executing on machine “B”, the process may alter a data object that has been stored in the local cache of machine “A”. If the process on machine “B” is migrated back to machine “A” at a later time and accesses the cached copy of the data that had been altered on machine “B”, the wrong data will be operated on leading to undesired behavior.
The approach used by competing products has been to logically segregate the cache device and to assign portions of the cache device to individual “guests” or processes within a physical machine. This approach requires administrative overhead in the assignment of caching resources, as well as requiring a mechanism to administratively associate the logical cache segments with individual processes. An example of this would be to logically partition a cache device into multiple logical units (referred to as LUNs), and then to use a LUN identifier (consisting of either a serial number scheme or physical path identification) to assign a LUN to a “guest” or process. When a “guest” or process is migrated from one physical machine to another, the LUN can then be either destroyed, invalidated, or re-assigned to another “guest” or process. Other mechanisms for portioning the cache device may also be used.
Disadvantages of this approach include, but are not limited to the administrative tasks necessary to partition and assign ownership of the cache device, the static nature of the amount of caching resources available to an individual “guest” or process (implementation dependent).
Some competing products do not support the movement of processes from one physical machine to another.
General definitions for terms utilized in the pertinent art are set forth below.
“Cache” refers to the memory in which data is stored in order to make the data more readily and speedily accessible, transparently. When a cache is exhausted, it is flushed of data, to be replaced with the next cache according to a replacement algorithm.
“Cached data” is data in cache memory duplicating original values stored elsewhere (such as the hard disk) on a computer.
“Cache hit” refers to when the processor looks for data in cache memory and finds the data. A cache hit places less strain on input/output (I/O) resources and limited network resources.
“Cache miss” refers to when the processor looks for data in cache memory and finds that it is not there, resulting in having to read from the main memory or hard disk. Data retrieved during a cache miss is often written into the cache in anticipation of further need for it.
“Caching resources” refers to the physical or virtual components of limited availability required for caches or the process of caching, such as memory or a processing unit.
“Cloud computing” is generally defined as using computing resources, primarily servers, owned by a third party provider (such as the AMAZON ELASTIC COMPUTE CLOUD, JOYENT, and GOOGLE APPS) such that the user does not need to make a substantial investment in computer hardware and scale resources depending on the user's needs. Cloud computing primarily involves Web applications but can include storage, raw computing and other specialized services.
“Data center” is a centralized location where computing resources (such as, host computers, servers, applications, databases, or network access) critical to an organization are maintained in a highly controlled physical environment.
“Execution environments” refers to operating systems or virtual machines in which executable programs are executed. When a computer program is executed, or running, a process is created.
“Load balancing” refers to distributing workload across multiple computers, central processing units, or other resources, to achieve optimal resource utilization, maximize throughput, minimize response time, and avoid overload.
“Logical unit number” or “LUN” is an identification number given to logical units (devices) connected to a SCSI “Small Computer System Interface” adapter; typically, the logical disks in a storage area network (SAN).
“Mass storage devices” refers to removable or non-removable media that can store large amounts of data, such as tape drives, redundant array of independent disks (RAID), magnetic disks, or flash drives.
“Non-volatile caching device” refers to a storage device that can retain data within memory even when the device is not powered on, such as a flash drive.
“Open source software” or “OSS” refers to computer software that is available with open access to the source code (design and implementation), which is typically free.
“Process identifier”, “process ID”, or “PID” is a number used by operating systems (OS) to uniquely identify a process, an OS object that consists of an executable program, a set of virtual memory addresses, and one or more threads. When a program runs, a process is created.
“Virtualization” refers to a computer software/hardware platform that allows running several operating systems simultaneously on the same computer. VMware vSphere Hypervisor™ (ESXi) is an example of a hardware virtualization product.
“Virtualized environment” refers to hypervisor, or virtualization, systems.
“Web-Browser” is a complex software program, resident in a client computer, that is capable of loading and displaying text and images and exhibiting behaviors as encoded in HTML (HyperText Markup Language) from the Internet, and also from the client computer's memory. Major browsers include MICROSOFT INTERNET EXPLORER, NETSCAPE, APPLE SAFARI, MOZILLA FIREFOX, and OPERA.
“Web-Server” is a computer able to simultaneously manage many Internet information-exchange processes at the same time. Normally, server computers are more powerful than client computers, and are administratively and/or geographically centralized. An interactive-form information-collection process generally is controlled from a server computer.
Data center environments often allow processes (such as computer programs) to move from one physical machine to another physical machine for the purposes of load balancing, power conservation, or routine maintenance. This presents a problem for any data that is persistently stored within a physical machine, since the data may be modified on a different machine when a process has been migrated, rendering the original data to be invalid or “stale.”